package com.itheima.aspect;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component//表示将类放入IOC容器
//@Aspect//当前类为切面类
@Slf4j
public class TimeAspect {

    //编写方法：表示需要增强的具体内容
    //切入点表达式:*返回值，*类，*方法，():表示参数
    @Around("execution(public * com.itheima.service.*.*(..))")
    @SneakyThrows//抑制异常。不用try...catch,throwable
    public Object around(ProceedingJoinPoint pjp){

        //记录开始时间
        long start = System.currentTimeMillis();

        //将原来的方法原封不动的执行
        Object proceed = pjp.proceed();

        //记录结束时间
        long end = System.currentTimeMillis();

        //getSignature()拿到签名
        log.info("{}方法执行的时间：{}",pjp.getSignature(),end-start);
        return proceed;
    }
}
